package net.lzzy.practices.services;

import net.lzzy.practices.entities.Applicant;
import net.lzzy.practices.entities.Course;

import java.util.List;
import java.util.UUID;

public interface ApplicantService {
    /**学生用户申请注册某一课程*/
    Applicant apply(UUID studentId, UUID courseId,String token);

    /**获取学生的所有状态的课程，包括申请中的、通过的和已拒绝的*/
    List<Applicant> getAllApplicants(UUID studentId);

    /**方法获取已注册并审批通过的课程*/
    List<Applicant> getEnrolledApplicants(UUID studentId);

    /**方法获取申请注册中的课程*/
    List<Applicant> getApplyingApplicants(UUID studentId);

    /**方法获取已被教师拒绝的课程*/
    List<Applicant> getDeclinedApplicants(UUID studentId);

    /**教师用户审批通过某一学生对该门课程的注册申请*/
    Applicant approve(UUID applicationId, String token);

    /**教师用户驳回某一学生对该门课程的注册申请*/
    Applicant decline(UUID applicationId, String token);

    /**获取该门课程所有正式学生*/
    List<Applicant> getEnrolledStudents(UUID courseId);

    /**获取正在申请注册该门课程的学生*/
    List<Applicant> getApplyingStudents(UUID courseId);

    /**获取已驳回的学生列表*/
    List<Applicant> getDesclingStudents(UUID courseId);

    /**从课程中移除已注册的学生*/
    Course removeStudent(UUID courseId,UUID studentId,String token);
}
